문자열 처리 함수

✒️ 2025-05-15 15:55 내용 수정

수제비 2024 정보처리기사 필기 5판 1권의 내용을 정리
TCPSchool의 내용을 정리


1. strlen()

#include <string.h>
size_t strlen(const char *s);
#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[] = "apple banana";
    printf("str 배열 길이 : %d\n", strlen(str));
}
str 배열 길이 : 12

2. strcat()과 strncat()

  1. strcat()하나의 문자열에 다른 문자열을 연결해준다.
    • 첫 번째 인수 : 기준 문자열
    • 두 번째 인수 : 연결할 문자열
#include <string.h>
char *strcat(char * restrict s1, const char * restrict s2);
  1. strncat()하나의 문자열에 다른 문자열을 연결해준다.
    • 첫 번째 인수 : 기준 문자열
    • 두 번째 인수 : 연결할 문자열
    • 세 번째 인수 : 추가할 문자열의 최대 길이
#include <string.h>
char *strncat(char * restrict s1, const char * restrict s2, size_t n);
#include <stdio.h>
#include <string.h>

int main(void)
{
    char strc[6] = "hello";
    char strcc[] = "world from C!";
    // strcat(strc, strcc); 는 오버플로우 발생
    strncat(strc, strcc, 5);
    puts(strc);
}
helloworld

3. strcpy()와 strncpy()

  1. strcpy()문자열을 복사한다.
    • 첫 번째 인수로 전달된 배열에 두 번째 인수로 전달된 문자열을 복사한다.
#include <string.h>
char *strcpy(char * restrict s1, const char * restrict s2);
  1. strncpy()문자열을 복사한다.
    • 첫 번째 인수로 전달된 배열에 두 번째 인수로 전달된 문자열을 복사하고, 세 번째 인수로 복사할 문자열의 최대 길이를 지정한다.
#include <string.h>
char *strcpy(char * restrict s1, const char * restrict s2, size_t n);
#include <stdio.h>
#include <string.h>

int main(void)
{
    char strcp[20] = "Pizza Chicken";
    char strcpp[6];
    
    // strcpp에 strcp를 배열 크기만큼 복사
    strncpy(strcpp, strcp, sizeof(strcpp)-1);
    // strcpp에 널 문자 삽입
    strcpp[sizeof(strcpp)-1] = '\0';
    puts(strcpp);
}
Pizza

4. strcmp()와 strncmp()

  1. strcmp()문자열의 내용을 비교한다.
    • 전달 받은 포인터들이 가리키는 문자열의 내용을 서로 비교한다.
    • 문자열의 모든 문자는 ASCII 코드값으로 변환되어 문자열의 맨 앞에서부터 순서대로 비교한다.
#include <string.h>
int strcmp(const char * s1, const char * s2);
반환값 설명
양수 s1 > s2
0 s1 = s2
음수 s1 < s2
  1. strncmp()문자열의 내용을 비교한다.
    • 전달 받은 포인터들이 가리키는 문자열의 내용을 서로 비교한다.
    • 세 번째 인수로 비교할 문자의 개수를 지정할 수 있다.
#include <string.h>
int strcmp(const char * s1, const char * s2, size_t n);
#include <stdio.h>
#include <string.h>

int main(void)
{
    char str1[] = "abc";
    char str2[] = "abc";
    char str3[] = "ABC";
    char str4[] = "abcABC";

    printf("str1 == str2 ? : %d\n", strcmp(str1, str2));
    printf("str1 == str3 ? : %d\n", strcmp(str1, str3));
    printf("str2 == str3 ? : %d\n", strcmp(str2, str3));
    printf("str1 == str4 ? : %d\n", strcmp(str1, str4));
    printf("str1 == str4 (first 3 letters) ? : %d\n", strncmp(str1, str4, 3));

    return 0;
}
str1 == str2 ? : 0
str1 == str3 ? : 1
str2 == str3 ? : 1
str1 == str4 ? : -1
str1 == str4 (first 3 letters) ? : 0

5. 문자열의 숫자 변환

#include <stdlib.h>
int atoi(const char *str); // int로 변환
int atol(const char *str); // long으로 변환
int atoll(const char *str); // long lnog으로 변환
int atof(const char *str); // double로 변환
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    printf("10 문자열 변환 : %d\n", atoi("10"));
    printf("100000000000000 문자열 변환 : %lld\n", atoll("100000000000000"));
    printf("3.14 문자열 변환 : %.2f\n", atof("3.14"));
    
    return 0;
}
10 문자열 변환 : 10
100000000000000 문자열 변환 : 100000000000000
3.14 문자열 변환 : 3.14

6. 대소문자 변환

#include <ctype.h>
int toupper(int c);
int tolower(int c);
#include <ctype.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[] = "Hello World";
    int str_len = strlen(str);

    char str_up[str_len+1];
    char str_low[str_len+1];

    puts(str);

    for (int i = 0; i < str_len; i++) {
        str_up[i] = toupper(str[i]);
        str_low[i] = tolower(str[i]);
    }

    str_up[str_len] = '\0';
    str_low[str_len] = '\0';
    
    puts(str_up);
    puts(str_low);
    return 0;
}
Hello World
HELLO WORLD
hello world